package com.zwy.ubts.service;

import com.zwy.ubts.dao.BaseDao;
import com.zwy.ubts.dao.UserDao;
import com.zwy.ubts.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;

import java.lang.reflect.ParameterizedType;

public class BaseService<T extends BaseDao> {
    protected T baseDao;
    private SqlSession sqlSession = null;

    //public UserDao getMapper(){
    //    // 创建持久层接口的代理对象
    //    SqlSession sqlSession = MybatisUtils.getSqlSession();
    //    UserDao mapper = sqlSession.getMapper(UserDao.class);
    //    return mapper;
    //}

    public BaseService(){
        sqlSession = MybatisUtils.getSqlSession();
        T mapper = sqlSession.getMapper(getTClass());
        baseDao = mapper;
    }

    /**
     * 获取泛型对相应的Class对象
     */
    private Class<T>  getTClass(){
        //返回表示此 Class 所表示的实体（类、接口、基本类型或 void）的直接超类的 Type。
        ParameterizedType type = (ParameterizedType)this.getClass().getGenericSuperclass();
        //返回表示此类型实际类型参数的 Type 对象的数组()，想要获取第二个泛型的Class，所以索引写1
        return (Class)type.getActualTypeArguments()[0];//<T>
    }

    @Override
    protected void finalize() throws Throwable {
        super.finalize();
        //System.out.println("自动销毁 关闭连接..."+sqlSession);
        //if (sqlSession != null){
        //    sqlSession.close();
        //}
    }

    //protected void close(){
    //    sqlSession.close();
    //}
    protected void commit(){
        sqlSession.commit();
        //考虑要不要做这个哦
        //sqlSession.close();
    }

}
